/**
 * @什么是树形数据
 * @本章会详细介绍树形转扁平
 */
import axios from 'axios';
//让我们新建一个树形数据吧
//通过axios请求一下吧
axios.get("/js/tree.json").then(async (res) => {
    let respone = await res.data;
    let res1 = repeat(respone);
    let reTree = flatTree(res1);
    console.log(Object.values(reTree))
})



//树形转扁平
//循环结构
//第一层无children 第二层有children
//无子节点直接push到我们得新数组中
//recursion[递归]
let repeat = (tree) => {
    // console.log(tree)
    let repeatArr = [];
    function recursion(tree) {
        tree.forEach(item => {
            repeatArr.push({
                id: item.id,
                city: item.city,
                introduce: item.introduce,
                province: item.province,
                pid: item.pid ?? ""
            })
            if (item.children) {
                recursion(item.children)
            }
        })
    }
    recursion(tree);
    return repeatArr;
}

//扁平转树形
//实现思路

let flatTree = (flat) => {
    //定义容器
    //遍历扁平数据
    //id和pid相同说明找到父亲了
    //使用find返回
    //找到父级添加children空数组 
    let tree = [];
    flat.forEach(item => {
        //返回所有的父级节点
        let parent = flat.find(v => item.pid === v.id);
        //如果说父节点存在
        if (parent) {
            //看看父级别有children嘛？么有就建立一个children
            if (!parent.children) {
                parent.children = []
            }
            //将当前的item
            parent.children.push(item);
        } else {
            tree.push(item)
        }
    });
    return tree;
}